package service

//import (
//	"github.com/gin-gonic/gin"
//	"github.com/gorilla/websocket"
//	"holidayone/basic/config"
//	"holidayone/handler/model"
//	"log"
//	"strconv"
//	"sync"
//)
//
//var (
//	upgrader = websocket.Upgrader{
//		ReadBufferSize:  1024,
//		WriteBufferSize: 1024,
//	}
//	clients = map[string]*Node{}
//	mu      sync.Mutex
//)
//
//type Node struct {
//	UserId string
//	Conn   *websocket.Conn
//	Data   chan []byte
//}
//
//func Chat(c *gin.Context) {
//	userId := c.Query("userId")
//	friendId := c.Query("friendId")
//	conn, err := upgrader.Upgrade(c.Writer, c.Request, nil)
//	if err != nil {
//		return
//	}
//	mu.Lock()
//	clients[userId] = &Node{
//		UserId: userId,
//		Conn:   conn,
//		Data:   make(chan []byte, 100),
//	}
//	mu.Unlock()
//
//	go ReceiverMsg(clients[userId], friendId)
//	go SenderMsg(clients[userId])
//}
//
//func ReceiverMsg(myNode *Node, fid string) {
//	defer func() {
//		mu.Lock()
//		delete(clients, myNode.UserId)
//		myNode.Conn.Close()
//		close(myNode.Data)
//		mu.Unlock()
//	}()
//	userId, _ := strconv.Atoi(myNode.UserId)-------------------------------
//		friendId, _ := strconv.Atoi(fid)
//	var friend model.Friend
//	if err := friend.IsFriend(config.DB, userId, friendId); err != nil {
//		log.Printf("好友关系不存在,无法发送消息")
//		return
//	}
//	var black model.Black
//	if err := black.IsBlack(config.DB, userId, friendId); err == nil {
//		log.Printf("好友存在黑名单,无法发送消息")
//		return
//	}----------------------------------------------------------------------------------------------------------------------------------
//	for {
//		_, data, err := myNode.Conn.ReadMessage()
//		if err != nil {
//			return
//		}
//		message := model.Message{---------------------------------------------------------------------------------
//			UserId:   userId,
//			FriendId: friendId,
//			Content:  string(data),
//		}
//		err = message.SaveMessage(config.DB)
//		if err != nil {
//			log.Printf("消息存储失败")
//			return
//		}----------------------------------------------------------------------------------------------------
//		mu.Lock()
//		friendNode, ok := clients[fid]
//		mu.Unlock()
//		if ok {
//			select {
//			case friendNode.Data <- data:
//			default:
//				log.Printf("error")
//			}
//		} else {
//			log.Printf("friend error")
//		}
//	}
//}
//
//func SenderMsg(myNode *Node) {
//	for {
//		select {
//		case data := <-myNode.Data:
//			err := myNode.Conn.WriteMessage(websocket.TextMessage, data)
//			if err != nil {
//				return
//			}
//		}
//	}
//}
